use enigo::{
    Button,
    Coordinate::Abs,
    Direction::{Click, Press, Release},
    Enigo, Key, Keyboard, Mouse, Settings,
};
use std::{io, thread, time::Duration};

fn main() {
    // 创建一个 Enigo 实例来控制键盘
    let mut enigo = Enigo::new(&Settings::default()).unwrap();

    trigger_keyboard(&mut enigo);

    thread::sleep(Duration::from_secs(5));

    trigger_mouse(&mut enigo);

    // 让终端暂停，直到用户按下回车
    println!("按回车键退出...");
    let mut input = String::new();
    io::stdin().read_line(&mut input).unwrap();
}

fn trigger_keyboard(enigo: &mut Enigo) {
    // 执行 X 键 10 次，每次间隔 20 毫秒
    println!("开始模拟键盘操作");
    for _ in 0..10 {
        // 按下 A 键
        enigo.key(Key::A, Press).unwrap();
        // 释放 A 键
        enigo.key(Key::A, Release).unwrap();
        // 等待 20 毫秒
        thread::sleep(Duration::from_millis(20));
    }

    // 间隔 5 秒
    thread::sleep(Duration::from_secs(5));

    // 执行 Q 键 10 次，每次间隔 50 毫秒
    for _ in 0..10 {
        enigo.key(Key::B, Press).unwrap();
        // 释放 A 键
        enigo.key(Key::B, Release).unwrap();
        thread::sleep(Duration::from_millis(50)); // 50 毫秒间隔
    }
    println!("模拟键盘操作完成");
}

fn trigger_mouse(enigo: &mut Enigo) {
    println!("开始模拟鼠标操作");
    enigo.move_mouse(500, 200, Abs).unwrap();
    enigo.button(Button::Left, Click).unwrap();
    enigo
        .text("Hello World! here is a lot of text  ❤️")
        .unwrap();
    println!("模拟鼠标操作完成");
}
